/**
 * Dep负责在数据的getter中收集依赖于该数据的模块，然后添加观察者，然后在数据的setter中通知依赖于该数据的地方去更新数据
 */
class Dep {
  constructor () {
    // 存储所有的观察者
    this.subs = []
  }

  // 添加观察者
  addSub (sub) {
    /**
     * 先判断sub是否是一个观察者
     * 1.sub不能为空
     * 2.根据约定sub必须有一个update方法
     */
    if (sub && sub.update) {
      this.subs.push(sub)
    }
  }

  // 发送通知，通知所有的观察着并执行每个观察者的update方法
  notify () {
    this.subs.forEach(sub => {
      sub.update()
    })
  }
}